MW的一个很小的细节,不知道大家发现没?
id: 820765587 | 楼主:No ID Information! | 返回首页
id: 8830832821
1L | 作者:121.233.214.* | 发布于 2010-07-07 17:04

先声明一下,可能俺煋了,大家表骂俺
氢氧化银同学发表过一个帖子 http://tieba.baidu.com/f?kz=630365351 里面提到一点:
行           含义               举例             举例释义      
1           (关卡长度*32)+10        6410         关卡长度=(6410-10)/32=200     
2           (关卡高度*32)+10        650         关卡高度=(650-10)/32=20

    大家都知道关卡的最小高度是15,按上面的式子换算后是490.但是大家应该发现:即使高度为最小值,游戏的时候如果玛丽跳起来超过半个屏幕,整个屏幕还是会轻微地抖动,另外如果玛丽站的位置很低并且最下面一排有砖块,你只能看到半个砖块露在外面。另外大家做岩浆的时候应该都发现了,如果最下面不垫砖块,岩浆是浮在空中的,很不美观。而如果把岩浆放在最下面,你就会只能看到它的一部分。
    其实那个+10是多余的,换句话说如果高度是480,随便玛丽怎么跳,屏幕不会出现半点抖动,而且岩浆的问题也能得到解决。当然这一切只有等编辑完地图手动修改文件方可实现。
    对于长度,道理完全相同,如果长度、高度值为32的整数倍,关卡看起来会美观很多。



id: 8830924947
2L | 作者:dd16168 | 发布于 2010-07-07 17:10

晕,我早就发现了...


id: 8831030947
3L | 作者:F0REVERD | 发布于 2010-07-07 17:17

_AgOH于2009年8月发现.

楼主已煋.



id: 8832402016
4L | 作者:Fahlee | 发布于 2010-07-07 18:56

LZ火星了....


id: 8835979661
5L | 作者:211.139.60.* | 发布于 2010-07-07 22:44




id: 8838717433
6L | 作者:HappyLee_12 | 发布于 2010-07-08 05:53

2,3,4楼务必注意,请不要频繁用火星二字打消新手朋友的积极性,谢谢...


id: 8845211382
8L | 作者:dd16168 | 发布于 2010-07-08 16:25

我没用火星啊?


id: 8859267233
9L | 作者:175.43.195.* | 发布于 2010-07-09 16:36

很感谢LZ的发现,另外我想声明一下……直至看到这个帖子之前我并没有发现这个秘密。
另外希望几位高手不要打击新手的积极性,正如吧主在6L所言。
by _AgOH



id: 8860590693
10L | 作者:175.43.195.* | 发布于 2010-07-09 18:12

额,看错LZ的意思了……
这个细节确实我已经在之前发现了,但是关于它的原理解释我有几点需要说明。
这并不是因为+10是多余的,当你把这个数据从490改为480时,关卡的高度已经不再是15而是14了【注意这里对关卡高度及宽度的定义:以向右为X轴的正方向,向下为Y轴的正方向,令左上角坐标为(0,0),最低点的Y坐标为关卡的高度,最右点的X坐标为关卡的长度。亦即,关卡在竖直方向上的单元格数比高度数多1。MW及MWV均按此坐标系统模式。】
MW在工作时按以下公式把相关数据换算成关卡的高度和宽度:
H=(D1-10) Mod 32
L=(D2-10) Mod 32
Mod运算符的含义为取整,这将意味着余数部分将被忽略。当D1=480时该公式的计算结果为H=14,并且,当D1的值取在458和489之间的任何一个数都将使H=14。亦即,MW能够支持的关卡高度下限并不是15而是14!而当D1<458时,即按照以上公式计算的H<14,MW读取MFL文件时将出现错误。
同理,宽度的下限可以达到19而不是20,原理与之类似。



id: 8860694590
11L | 作者:175.43.195.* | 发布于 2010-07-09 18:20

说到这里顺便提一下MW实际支持的关卡长度和高度的上限,在MW环境下编辑MFL只能创建300长度/高度以下关卡,但是实际上这个上限可以提升到312。为什么是312?这与MW对【OtherData】(详见原帖)部分数据的处理有关。原帖中提到对这部分数据的解析:
00108160448
1-3位为物品代号,4-7位为X坐标乘上32之后的结果,8-11位为Y坐标乘上32之后的结果。
由于313*32>10000,当关卡长度/高度超过312时,超过312的部分尽管Blocks数据能被正常加载,但是其它物品却无法正常存储,这部分内容只有Blocks,其它的一切,包括实心块均无法被存储,故是没有意义的。
by _AgOH



id: 8863866523
12L | 作者:CXY0101 | 发布于 2010-07-09 21:57

对于没有研究过MW的偶来说就是天书啊~ - -


id: 8865053860
13L | 作者:211.139.60.* | 发布于 2010-07-09 23:20

楼上。。。


id: 8888426028
14L | 作者:175.43.205.* | 发布于 2010-07-11 17:35

我杯具了。。。
那两个公式应该这么写:
H=(D1-10)\32
L=(D2-10)\32
在此向大家道歉、、、MOD表示取余不是取整、、、最近一阶段不玩程序居然犯了这么低级的错误……